package com.hm.manage.utils;

import com.hm.manage.dto.FileSizeInfo;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FileSizeParser {
    // 匹配模式：数值(含小数点) + 单位字母 + 制表符 + 路径
    private static final Pattern LINE_PATTERN =
            Pattern.compile("^(\\d+\\.?\\d*)([TGMK]?)\\t(.+)$");

    /**
     * 解析文件大小信息行并转换为FileSizeInfo对象
     *
     * @param line 输入字符串行，应包含文件大小信息（格式示例："12.3 KB"）
     * @return FileSizeInfo 包含解析后的文件尺寸信息对象
     * @throws IllegalArgumentException 当输入行格式不符合预定义模式时抛出
     */
    public static FileSizeInfo parseLine(String line) {
        // 使用预定义正则表达式匹配并验证输入行格式
        Matcher matcher = LINE_PATTERN.matcher(line.trim());
        if (!matcher.find()) {
            throw new IllegalArgumentException("Invalid format: " + line);
        }

        // 从匹配结果中提取并转换三个组成部分：
        // 1. 数值部分转换为double类型
        // 2. 可选单位前缀（可能为空字符串）
        // 3. 基础单位字符串
        return new FileSizeInfo(
                Double.parseDouble(matcher.group(1)),
                matcher.group(2).isEmpty() ? "" : matcher.group(2),
                matcher.group(3)
        );
    }

    /***
     * 根据输入的文件信息，判断文件大小是否超过限制
     * @return
     */
    public static String getResult(FileSizeInfo fileSizeInfo,Double sizeline){
        // 如果文件的单位为空，直接返回正常
        if (fileSizeInfo.getUnit().isEmpty()) {
            return "正常";
        } else if (fileSizeInfo.getUnit().equals("T")) {
            return "异常";
        } else if (fileSizeInfo.getUnit().equals("K")) {
            return "正常";
        } else if (fileSizeInfo.getUnit().equals("M")) {
            return "正常";
        } else if (fileSizeInfo.getUnit().equals("G")) {
            if (fileSizeInfo.getSizeValue() > sizeline) {
                return "异常";
            }
            return "正常";
        } else {
            return "异常";
        }

    }

}
